package com.wuxinwudai.android.widget;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.support.annotation.ColorInt;
import android.support.annotation.DrawableRes;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.wuxinwudai.android.R;
import com.wuxinwudai.android.util.StringUtils;
import com.wuxinwudai.ap.Utils;

/**
 * CompoundGoView 类为组合式控件，通用用于跳转
 * @author 吾心无待 于 2016年08月04日
 */
public class CompoundGoView extends LinearLayout {
    //region 私有成员
    private ImageView mivIcon;//图标视图
    private TextView mtvSubject;//主题文本
    private TextView mtvValue;//值文本
    protected ImageView mivNext;//显示箭头图标
    private boolean misShowIcon;
    private  int dp10, dp22,dp8,dp14;
    //endregion

    //region 构造函数
    /**
     * 构造函数，初始化 CompoundGoView 视图的新实例
     * @param context 上下文对象
     */
    public CompoundGoView(Context context) {
        this(context,null);
    }

    /**
     * 构造函数，初始化 CompoundGoView 视图的新实例
     * @param context 上下文对象
     * @param attrs 属性列表
     */
    public CompoundGoView(Context context, AttributeSet attrs) {
        super(context,attrs);
        init(context,context.obtainStyledAttributes(attrs,R.styleable.CompoundGoView));
    }

    /**
     * 构造函数，初始化 CompoundGoView 视图类的新实例
     * @param context 上下文对象
     * @param attrs 属性列表
     * @param defStyleAttr 样式
     */
    public CompoundGoView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray ta = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CompoundGoView, defStyleAttr, 0);
        init(context,ta);
    }
    //endregion

    //region 重要方法
    //初始化视图
    private void init(Context context,TypedArray ta) {
        if (!isInEditMode()) {
            dp10 = (int)getResources().getDimension(R.dimen.dp10);
            dp22 = (int)getResources().getDimension(R.dimen.dp22);
            dp8 = (int)getResources().getDimension(R.dimen.dp8);
            dp14 = (int)getResources().getDimension(R.dimen.dp14);
        }else{
            //设置 LinearLayout
            dp10 = Utils.dp2px(context.getResources(),10);
            dp22 = Utils.dp2px(context.getResources(),22);
            dp8 = Utils.dp2px(context.getResources(),8);
            dp14 = Utils.dp2px(context.getResources(),14);
        }
        setOrientation(HORIZONTAL);
        setGravity(Gravity.CENTER_VERTICAL);
        setClickable(true);
        setBackgroundResource(R.drawable.selector_ff_fd);
        setPadding(0,dp10,0,dp10);//设置上下各Padding 10dp
        //设置左边图片
        mivIcon = new ImageView(context);
        LayoutParams lpIcon = new LayoutParams(dp22,dp22);
        lpIcon.setMargins(dp10,0,0,0);//设置marginLeft 10dp
        mivIcon.setLayoutParams(lpIcon);
        mivIcon.setImageDrawable(ta.getDrawable(R.styleable.CompoundGoView_Icon));
        addView(mivIcon);
        //设置 Subject TextView
        mtvSubject = new TextView(context);
        mtvSubject.setTextColor(Color.parseColor("#FF333333"));
        addView(mtvSubject);
        //设置 值 TextView
        mtvValue = new TextView(context);
        mtvValue.setTextColor(0xFF999999);
        LayoutParams lpValue = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        lpValue.setMargins(0,0,dp10,0);//marginRight 10dp
        mtvValue.setLayoutParams(lpValue);
        addView(mtvValue);
        //设置右箭头图片
        mivNext = new ImageView(context);
        LayoutParams lpNext = new LayoutParams(dp8,dp14);
        lpNext.setMargins(0,0,dp10,0);
        mivNext.setLayoutParams(lpNext);
        mivNext.setImageResource(R.mipmap.arrow_right);
        addView(mivNext);
        String subject = ta.getString(R.styleable.CompoundGoView_SubjectText);
        if(StringUtils.isNullOrWhiteSpace(subject))subject = "标题文本";
        mtvSubject.setText(subject);
        mtvValue.setText(ta.getString(R.styleable.CompoundGoView_ValueText));
        setShowIcon(ta.getBoolean(R.styleable.CompoundGoView_ShowIcon, true));
    }
    //将布局放置到 onMeasure 以支持预览
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        LayoutParams lpSubject = new LayoutParams(0, LayoutParams.WRAP_CONTENT,1f);//把布局放置到 OnMeasure 以支持预览
        lpSubject.setMargins(dp10,0,0,0);
        mtvSubject.setLayoutParams(lpSubject);
    }
    //endregion

    //region 公有属性

    /**
     * 设置显示的图标
     * @param icon 图标资源 id
     */
    public void setIcon(@DrawableRes int icon){
        mivIcon.setImageDrawable(getResources().getDrawable(icon));
    }

    /**
     * 获取图标
     * @return Drawable 对象
     */
    public Drawable getIcon(){
        return mivIcon.getDrawable();
    }

    /**
     * 判断是否显示图标
     * @return 是否显示图标
     */
    public boolean isShowIcon(){
        return misShowIcon;
    }

    /**
     * 设置是否显示图标
     * @param show 是否显示图标
     */
    public void setShowIcon(boolean show){
        misShowIcon = show;
        if (show) mivIcon.setVisibility(VISIBLE);
        else  mivIcon.setVisibility(GONE);
    }

    /**
     * 获取主题文本
     * @return 主题文本
     */
    public String getSubjectText(){
        return mtvSubject.getText().toString();
    }

    /**
     * 设置主题文本
     * @param subject 主题文本
     */
    public void setSubjectText(String subject){
         mtvSubject.setText(subject);
    }

    /**
     * 获取值文本
     * @return 值文本
     */
    public String getValueText(){
        return mtvValue.getText().toString();
    }

    /**
     * 设置值文本
     * @param value 值文本
     */
    public void setValueText(String value){
        mtvValue.setText(value);
    }

    /**
     * 设置主题文本颜色
     * @param color 颜色值
     */
    public void setSubjectTextColor(@ColorInt int color){
        mtvSubject.setTextColor(color);
    }

    /**
     * 设置值文本颜色
     * @param color 颜色值
     */
    public void setValueTextColor(@ColorInt int color){
        mtvValue.setTextColor(color);
    }
    //endregion
}